package com.example.sxt_practise.thread.ThreadEightLock;

import java.util.concurrent.TimeUnit;

/**
 *  3.增加了一个普通方法后,发短信还是执行sayHello ,答案是:sayHello()
 *  4.两个对象,调用两个同步方法,谁先执行 : call()
 * @author 高枫
 */
public class Test2 {
    public static void main(String[] args) {
        // 两个对象,两个调用者,两把锁
        Phone2 phone1= new Phone2() ;
        Phone2 phone2 = new Phone2() ;

        // 两个线程，谁先拿到锁谁先执行
        new Thread(phone2::sendMsg, "A").start();

        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        new Thread(phone1::call,"B").start();
//        new Thread(phone2::sayHello, "C").start();
    }
}


class Phone2 {
    /**
     * synchronized锁的是方法的调用者
     * 两个方法是同一个锁,谁先拿到谁执行
     */
    public synchronized void sendMsg() {
        try {
            TimeUnit.SECONDS.sleep(4);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("发送短信！");
    }

    public synchronized void call() {
        System.out.println("打电话！");
    }

    /**
     * 不是同步方法，不受锁的影响，比上面两个方法先执行
     */
    public  void sayHello() {
        System.out.println("say hello！");
    }
}